Gmailで問題が生じる神奈川県立高校ネット出願システムの被疑箇所を調査、改善策を検討してみた
2024年の神奈川県立高校入試出願システムの不具合の影響を受け、@gmail.comのメールアドレス を利用出来なかった一利用者として、 インターネットから参照可能な範囲で、出願システムのメール環境について調査。
被疑箇所の推定と、状況を改善する対策について検討する機会がありましたので、紹介させて頂きます。
神奈川県公立高等学校入学者選抜インターネット出願システムの稼動状況について
MX設定
「mail.shutsugankanagawa.jp」のMXレコードを確認しました。
1/18(21時)
$ dig mx mail.shutsugankanagawa.jp +short 10 ec2-13-113-157-93.ap-northeast-1.compute.amazonaws.com. 10 ec2-52-193-62-66.ap-northeast-1.compute.amazonaws.com. 10 ec2-52-194-140-218.ap-northeast-1.compute.amazonaws.com.
1/17
当記事の執筆時前日は、1件 MXレコードの設定が多い事が確認できました。
$ dig mx mail.shutsugankanagawa.jp +short 10 ec2-13-113-157-93.ap-northeast-1.compute.amazonaws.com. 10 ec2-52-193-62-66.ap-northeast-1.compute.amazonaws.com. 10 ec2-52-194-140-218.ap-northeast-1.compute.amazonaws.com. 20 feedback-smtp.ap-northeast-1.amazonses.com.
1/16
執筆者は確認する事ができていないため、SNS上に報告されていた内容の再現になります。
- SNS報告より再現
10 13.113.157.93. 10 52.193.62.66. 10 52.194.140.218. 20 feedback-smtp.ap-northeast-1.amazonses.com.
MXレコードとしては望ましくないIPの直接記述、かつ末尾に「.」が付与されているため、IPアドレスとしても正しく判定されない場合もありうる状態だった模様です。
神奈川県高校出願システムだけど、何気にMXレコードをみたらとんでもない設定ミスしてる。こんな基本的な事に気づかないなんてダメでしょ。 pic.twitter.com/hmBgpUqhgl
— Hi. NONOGAKI (@xplntr) January 16, 2024
MXの対象(メール転送先)
EC2
MXとして設定されていた 1台のEC2を対象として、SMTPの公開ポート(TCP25)からの応答を確認しました。
$ nmap -A ec2-52-194-140-218.ap-northeast-1.compute.amazonaws.com -p 25 -Pn Starting Nmap 7.93 ( https://nmap.org ) at 2024-01-18 12:02 UTC Nmap scan report for ec2-52-194-140-218.ap-northeast-1.compute.amazonaws.com (52.194.140.218) Host is up (0.0012s latency). PORT STATE SERVICE VERSION 25/tcp open smtp Postfix smtpd |_smtp-commands: mail.shutsugankanagawa.jp, PIPELINING, SIZE 10485760, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING | ssl-cert: Subject: commonName=ip-10-0-8-112.ap-northeast-1.compute.internal/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=-- | Not valid before: 2023-09-01T11:15:45 |_Not valid after: 2024-08-31T11:15:45 |_ssl-date: TLS randomness does not represent time Service Info: Host: mail.shutsugankanagawa.jp
- EC2上で Postfix が動作していました。
- TLS(STARTTLS)をサポートする設定でしたが、そのサーバ証明書は自己証明書でした。
SES
1/18 に削除されていましたが、1/17時点で存在していた MXレコード設定は、 AWSのメールサービス(Amazon Simple Email Service)のエラーメール受け取り用のものでした。
$ nmap -A feedback-smtp.ap-northeast-1.amazonses.com. -p 25 -Pn (略) Other addresses for feedback-smtp.ap-northeast-1.amazonses.com. (not scanned): 3.115.130.245 18.178.46.176 rDNS record for 18.178.226.103: ec2-18-178-226-103.ap-northeast-1.compute.amazonaws.com PORT STATE SERVICE VERSION 25/tcp open nagios-nsca Nagios NSCA |_ssl-date: TLS randomness does not represent time | smtp-commands: feedback-smtp.ap-northeast-1.amazonses.com, 8BITMIME, SIZE 40960000, STARTTLS, Ok |_ Amazon SES on feedback-smtp.ap-northeast-1.amazonses.com Topics: HELP HELO RCPT MAIL DATA EHLO NOOP RSET VRFY QUIT STARTTLS For more info use "HELP <topic>". End of HELP info
MXレコードの転送優先度として、EC2は「10」、SESは「20」となっていましたが、 3台のすべてのEC2がメール転送先として適切ではないと判定された場合、このSES用の設定がメール転送先として利用されうる状態でした。
$ dig mx mail.shutsugankanagawa.jp +short 10 ec2-13-113-157-93.ap-northeast-1.compute.amazonaws.com. 10 ec2-52-193-62-66.ap-northeast-1.compute.amazonaws.com. 10 ec2-52-194-140-218.ap-northeast-1.compute.amazonaws.com. 20 feedback-smtp.ap-northeast-1.amazonses.com.
※ 出願者がGmailから送信する空メール、 Gmail がEC2への配信を試みた際、末尾に「.」を含むIPアドレス指定や、不完全、適切なCA署名のないサーバ証明書により、メール転送先として不適切と判断。 本来配信されない筈のエラーメール受け取り用のSESに吸い込まれて消失した。もしくは SESが受け取り拒否した事で、 Gmail側のサプレッションリスト(ブラックリスト)に「shutsugankanagawa.jp」のドメインが登録された可能性があると推測します。
現時点の出願システムが利用している Amaozn SES、Yahooメールに届いたメールに含まれるヘッダー情報(Return-Path)より、
Return-Path: <...>@pref.kanagawa3.mail.shutsugankanagawa.jp> Date: Wed, 17 Jan 2024 16:42:34 +0000
MAIL FROM ドメインとして 「pref.kanagawa3.mail.shutsugankanagawa.jp」 が設定されて、必要なMXレコードについても正しく設定されている模様でした。
$ dig mx pref.kanagawa3.mail.shutsugankanagawa.jp +short 10 feedback-smtp.ap-northeast-1.amazonses.com.
「mail.shutsugankanagawa.jp」 のMXレコードの設定経緯については、外部から知るすべがありませんが、 今後の参考となる情報として、ポストモーテムが開示される事を期待したいと思います。
改善方法
EC2上で動作する Postfixのメール設定、 外部への公開情報の範囲だけでも、推奨事項を反映する改善余地はあると推測されます。
Ec2のEIPと逆引き含めたDNS設定
EC2を利用してメール送信を行う場合、ホストのDNS登録と逆引きDNS申請が推奨されています。
EC2上に独自構築したメールサーバ用の固定IP(EIP)を確保し、Aレコードに反映。
- Aレコード
mail1 14400 A 203.0.113.1 mail2 14400 A 203.0.113.2 mail3 14400 A 203.0.113.3
- MXレコード
300 MX 10 mail1.shutsugankanagawa.jp. 300 MX 10 mail2.shutsugankanagawa.jp. 300 MX 10 mail3.shutsugankanagawa.jp.
DNSの逆引き設定も、専用フォームを利用する事で可能です。
サーバ証明書(Postfix用)
Gmail、メールサーバ間の通信についても、TLSによる暗号化を推奨しています。
Gmailの動作として、メール転送先のメールサーバのサーバ証明書が自己証明書や、サーバ名が一致しない場合の挙動について明示された資料については確認できていませんが、 Postfixに設定されている以下の自己証明書を Let's Encrypt などの正規認証局で発行されたものに差し替える事ができれば、 現状よりは 正規、安全なサーバとして判断される可能性は高まると思われます。
| ssl-cert: Subject: commonName=ip-10-0-8-112.ap-northeast-1.compute.internal/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
SSLメールサーバ構築メモ Postfix + Dovecot【2023年版】
- Let's Encrypt のSSL/TLS証明書の取得
- Postfix の設定
まとめ
出願システムの不具合影響を受けた一利用者として、業務時間外に試みた調査結果を共有させて頂きました。 個人の見解、推測に基づくものであり、報告者が所属する組織の公式見解ではない点にご留意ください。
Gmail の要求レベルに適合するメール環境を用意、継続的に維持する事は 年々難易度が上がっています。
メール受信環境として、Amazon SESの採用。
ユーザー登録画面に高度なカスタマイズを必要としない場合、AWSが提供する カスタマーID基盤のCognito などを活用することで、自前のメールサーバを必要としないシステムを実現できる可能性があります。
- デフォルトドメイン(verificationemail.com)を利用した、Cognitoからのメールの送信者認証情報
また、今回の出願システムの不備の影響は受けた利用者は、
入学定員(a+b+c+d+e)41,193人
Gmailアカウントは2023年のメールクライアント市場で世界シェアの約30%を占めている。米国に限れば市場シェアは53%に跳ね上がる
より、少なくとも 1万人単位で影響を受けていることが推測されます。まずは本年度の入試が無事に完了する事を願いたいと思います。
このような規模、失敗による影響が大きなシステムをAWSで稼働させる場合、 AWSを含む関連システムに精通したパートナーの選定や、機能、非機能方面を含めた充分なテストなどの実施。
一定数以上のメールを送信する可能性がある場合、事前のウォームアップや、ウォームアップの維持。
新しい専用 IP アドレスから E メールの送信を開始する場合は、そのアドレスから送信する E メールの量を徐々に増やし、その後でアドレスを最大容量まで使用する必要があります。
Amazon Simple Email Service 開発者ガイド 専用 IP アドレス (標準) のウォームアップ
- ウォームアップの実施イメージ(1日100通から開始、1日毎に20%増加)
さらには、AWSの上位エンタープライズサポートや、その追加オプションとして利用できる AWS Countdownの活用など、アーキテクチャの見直しとあわせて今後の再発防止に取り込まれる事に期待したいと思います。